package vista;



import grafica.DartVista;
import grafica.Grafica;
import grafica.ListaOstacoli;


import java.awt.Graphics;
import java.util.Observable;
import java.util.Observer;

import javax.swing.JPanel;

import controllo.MuoviControllore;
import controllo.SparaControllore;

import modulo.Giocatore;
import modulo.InfoGioco;
import modulo.ProxyListaGiocatori;

public class Campo extends JPanel implements Observer {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private InfoGioco infogioco;
	private Grafica grafica;
	private ListaOstacoli lista;
	public Campo(InfoGioco infogioco,Grafica TipoGrafica,AlertDialog alert) {
		this.infogioco = infogioco;
		this.grafica=TipoGrafica;
		Giocatore[] giocatori = infogioco.getLista().getElencoGiocatori();
		giocatori[0].addObserver(this);
		ProxyListaGiocatori proxy=new ProxyListaGiocatori(infogioco.getLista());
		 this.lista = new ListaOstacoli();
		 grafica.GeneraOstacoli(lista);
	//	giocatori[0].getDardo().addObserver(this);
		MuoviControllore controlloremovimento = new MuoviControllore(
				lista,proxy,alert);
		SparaControllore controllosparo = new SparaControllore(proxy,alert);
		controllosparo.AggiungiOsservatore(this);
		setFocusable(true);
		addKeyListener(controlloremovimento);
		addMouseListener(controllosparo);
		addKeyListener(controllosparo);
		 addMouseMotionListener(controllosparo);
	
	
		}

	@Override
	protected void paintComponent(Graphics g) {
		super.paintComponent(g);
		infogioco.getLista().setMode(infogioco.getModalitaAttiva());
		infogioco.getLista().setGrafica(grafica);
		infogioco.getLista().draw(g);
		lista.draw(g);
		DartVista vi=grafica.getTipoVistaDardo();
		vi.setDardo(infogioco.getLista().getElencoGiocatori()[0].getDardo());
		if(vi.getDardo().getXf()!=vi.getDardo().getXi()&&vi.getDardo().getYi()!=vi.getDardo().getYf()){
			vi.draw(g);
		}
	}

	@Override
	public void update(Observable arg0, Object arg1) {
		repaint();
	}

}
